/* 封装axios用于发送请求 */
import axios from 'axios'

import jsonBig from 'json-bigint'
import qs from 'qs';



const url = import.meta.env.VITE_APP_API_BASE
console.log(url, "request");


// 创建一个新的axios实例
const request = axios.create({
  baseURL: url,
  timeout: 5000,
  headers: {
    "Content-Type": 'application/json',
    // "Authorization": "eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImFkZmYzNjZiLTI1MjQtNGMxZC04MWU1LTZjNTZjMjAwY2E0NiJ9.ecFNTpgmVVHP_VVhuh_8isV_MY6qQwEX9E-A6klwjl5Bi2eR7m448ZyIKYznrQL5rh0Ba_yZXAo-2WwSg_0UQQ"
    // 不要在这里硬编码Authorization头部，我们将在拦截器中设置它
    'Connection': 'keep-alive'
  },
  transformResponse: [function (data) {//transformResponse这个配置项可以拦截接口返回的内容进行处理
    try {
      // 如果大数字类型转换成功则返回转换的数据结果
      return jsonBig.parse(data);
    } catch (err) {
      // 如果转换失败，代表没有长数字可转，正常解析并返回
      return JSON.parse(data)
    }
  }]

});

// 添加请求拦截器
request.interceptors.request.use(
  config => {
    // 从 localStorage 获取 token
    const token = localStorage.getItem('token');
    console.log(token);

    // 如果 token 存在，则添加到请求头部
    if (token) {
      // config.headers['Authorization'] = `Bearer ${token}`;
      config.headers['Authorization'] = token;
    }
    console.log(config);

    // 返回配置对象以继续请求
    return config;
  },
  error => {
    // 对请求错误做些什么（可选）
    return Promise.reject(error);
  }
);

// 添加响应拦截器
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  console.log(response);

  return response;
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

// 封装GET请求
export function get(url, params = {}) {
  return request.get(url, { params })
    .then(response => {
      // 可以在这里对响应数据进行统一处理，‌但在这个例子中我们直接返回
      return response.data;
    })
    .catch(error => {
      // 处理请求错误，‌这里可以根据需要调整
      console.error('GET请求失败：‌', error);
      return Promise.reject(error);
    });
}


// 封装POST请求
export function post(url, data = {}) {
  return request.post(url, data)
    .then(response => {
      // 可以在这里对响应数据进行统一处理，‌但在这个例子中我们直接返回
      return response.data;
    })
    .catch(error => {
      // 处理请求错误，‌这里可以根据需要调整
      console.error('POST请求失败：‌', error);
      return Promise.reject(error);
    });
}
export function put(url, data = {}) {
  return request.put(url, data)
    .then(response => {
      // 可以在这里对响应数据进行统一处理，‌但在这个例子中我们直接返回
      return response.data;
    })
    .catch(error => {
      // 处理请求错误，‌这里可以根据需要调整
      console.error('put请求失败：‌', error);
      return Promise.reject(error);
    });
}
export function del(url, data = {}) {
  return request.del(url, data)
    .then(response => {
      // 可以在这里对响应数据进行统一处理，‌但在这个例子中我们直接返回
      return response.data;
    })
    .catch(error => {
      // 处理请求错误，‌这里可以根据需要调整
      console.error('del请求失败：‌', error);
      return Promise.reject(error);
    });
}

export default request
